package com.mmy.dao.line;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.mmy.domain.line.VLinePlan;

public interface VLinePlanRepository extends JpaRepository<VLinePlan, Integer> {

	/**
	 * 函数功能说明：查询所有线路计划单
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路计划单集合
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 liys
	 * @date 创建日期 修改时间 2021.03.23
	 */

	@Query(value = " SELECT * FROM vLinePlan where iType = :iType", nativeQuery = true)
	List<VLinePlan> findAllSurrouding(@Param("iType")int iType);
	/**
	 * 函数功能说明： 查询该线路计划单
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路计划单集合
	 * @throws 异常处理说明
	 * @author 创建人 liys
	 * @date 创建日期 2021.01.20
	 */
	@Query(value = " SELECT * FROM vLinePlan where iLineID = :iLineID order by dStartDate desc", nativeQuery = true)
	List<VLinePlan> findLinePlan(@Param("iLineID")int iLineID);
	/**
	 * 函数功能说明：查询 当前时间有效 的线路计划 并取最小金额 endDate > now()
	 * 			     前台线路￥***元起
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路计划单集合
	 * @throws 异常处理说明
	 * @author 创建人liys
	 * @date 创建日期 2021.1.4
	 */

	@Query(value = " SELECT a.* FROM vLinePlan a INNER JOIN ( SELECT iLineID, MIN( fPrice ) AS fMinPrice FROM vLinePlan  WHERE dEndDate > now() GROUP BY iLineID ) b ON a.iLineID = b.iLineID "
			+ " AND a.fPrice = b.fMinPrice and iType = :iType", nativeQuery = true)
	List<VLinePlan> findNowSurrouding(@Param("iType")int iType);
	
	/**
	 * 函数功能说明：通过planID查询
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路计划单对象
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	@Query(value = "select iPlanID,cStandard,iLineID,DATE_FORMAT(dStartDate,'%Y-%m-%d %H:%i:%S') as dStartDate,DATE_FORMAT(dEndDate,'%Y-%m-%d %H:%i:%S')  as dEndDate,fFloor,fPeer,fPrice,iNumber,dCreateDate,cCreator,dModifyDate,cReviser,cMemo,cLineName,iType,cSpare1,cSpare2,cSpare3,cSpare4,cSpare5 from vLinePlan where iPlanID = ?1", nativeQuery = true)
	VLinePlan findByPlanID(int iPlanID);

	/**
	 * 函数功能说明：通过LineID查询
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路计划单集合
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	@Query(value = "select *  from vLinePlan where iLineID=?1", nativeQuery = true)
	List<VLinePlan> findByLineID(int iLineID);
	/**
	 * 函数功能说明：通过线路ID查询：今天在startDate和endDate之间的计划单
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路计划单集合
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	@Query(value = "select *  from vLinePlan where iLineID = :iLineID and now() between dStartDate and dEndDate", nativeQuery = true)
	List<VLinePlan> findByLineIdNow(@Param("iLineID")int iLineID);
	/**
	 * 函数功能说明：通过线路ID查询：未过期的计划单 (今天在endDate之前)
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路计划单集合
	 * @throws 异常处理说明
	 * @author 创建人liys
	 * @date 创建日期  2021.1.8
	 */
	@Query(value = "select * from vLinePlan where iLineID = :iLineID and dEndDate >= now()", nativeQuery = true)
	List<VLinePlan> findPlanValid(@Param("iLineID")int iLineID);
	/**
	 * 函数功能说明：通过线路ID和时间查询：当天的计划单
	 *
	 * @param 参数说明
	 * @return 返回值说明 list
	 * @throws 异常处理说明
	 * @author 创建人liys
	 * @date 创建日期  2021.1.11
	 */
	@Query(value = "select iPlanID,cStandard,fPrice,iNumber from vLinePlan where iLineID = :iLineID and dEndDate >= :date", nativeQuery = true)
	List<Map<String,Object>> findPlanValidMap(@Param("iLineID")int iLineID,@Param("date") Date date);
}
	
